﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ucntemaxp.DB;
using System.Linq.Expressions;

namespace ucntemaxp.Ctr
{
    class CtrFilm
    {
        private DB.Dm74_1Entities DBCon;

        public CtrFilm()
        {
            DBCon = new DB.Dm74_1Entities();
        }

        public Film findFilm(string titel)
        {
            try
            {
                Film f = DBCon.Films.First(i => i.Titel.Equals(titel));
                return f;
            }
            catch (Exception ex)
            {

                throw ex;
            }

        }

        public Film findFilmId(int id)
        {
            try
            {
                Film f = (Film)DBCon.Films.First(i => i.Filmid == id);
                return f;
            }
            catch (Exception ex)
            {

                throw ex;
            }

        }

        public List<string> findAlleTitel()
        {
            
            List<string> titels = DBCon.Films.Select(Film => Film.Titel).ToList();
            return titels;
        }

        public List<Film> findAlleFilm()
        {

            List<Film> film = DBCon.Films.Select(Film => Film).ToList();
            return film;
        }

        public bool checkTitel(string titel)
        {
            bool b = false;
            List<string> titels = new List<string>();
            titels = findAlleTitel();
            foreach (string t in titels)
            {
                if (t.Equals(titel))
                {
                    b = true;
                }
            }
            return b;
        }

        public void addFilm(string titel, string spillelængde, string aldersgrænse, decimal stjerner, DateTime premieredato)
        {
            try
            {
                DBCon.Films.AddObject(new Film()
                {
                    Titel = titel,
                    SpilleLængde = spillelængde,
                    AldersGrænse = aldersgrænse,
                    Stjerner = stjerner,
                    PremiereDato = premieredato
                });
                DBCon.SaveChanges();
            }
            catch (Exception)
            {

            }
        }

        public void removeFilm(int filmid)
        {
            try
            {
                Film f = DBCon.Films.First(r => r.Filmid == filmid);
                DBCon.Films.DeleteObject(f);
                DBCon.SaveChanges();
            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

        public void updateFilm(int filmid, string titel, string spillelængde, string aldersgrænse, decimal stjerner, DateTime premieredato)
        {
            try
            {
                Film f = DBCon.Films.First(i => i.Filmid == filmid);
                f.Titel = titel;
                f.SpilleLængde = spillelængde;
                f.AldersGrænse = aldersgrænse;
                f.Stjerner = stjerner;
                f.PremiereDato = premieredato;
                DBCon.SaveChanges();
            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

        public void Update(Action<Film> updateStatement, Expression<Func<Film, bool>> where)
        {
            // get your object context & objectset, cast to IQueryable<T>
            var table = (IQueryable<Film>)DBCon.CreateObjectSet<Film>();

            // filter with the Expression
            var items = table.Where(where);

            // perform the Action on each item
            foreach (var item in items)
            {
                updateStatement(item);
            }

            // save changes.
        }


    }
}
